package com.zhike.common.repository;

import java.util.Date;

import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.format.annotation.DateTimeFormat;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.zhike.common.dto.MsgBodyRoot;
import com.zhike.common.dto.MsgType;

import lombok.Data;

@Document(collection = "history_message")
@Data
public class HistoryMessage {

    /** 消息ID */
    @Id
    private String id;
    /** 会话ID */
    private String sessionId;
    /** 发送者ID (设备ID) */
    private String senderUid;
    // 发送者昵称
    private String senderNickname;
    /** 发送者设备号 */
    private String senderDeviceNo;
    /** 群ID 本字段只有在聊天模式类型chatType为“2 群聊”时有意义且不应为空，表示本条群聊消息发于在哪个群里 */
    private String groupId;
    /** 接收者ID 此字段可以是用户ID，也可以是群ID，通过chatType区分单聊或群聊 */
    private String receiver;
    // 接受者昵称
    private String receiverNickname;
    /** 接收者设备号 */
    private String receiverDeviceNo;
    /** 消息内容 */
    private String content;
    /** 聊天模式类型，详见 {@link MsgBodyRoot} */
    private Integer chatType;
    /** 聊天消息类型 详见{@link MsgType} */
    private Integer msgType;
    /** 本字段只有在聊天模式类型chatType为“2 群聊”时有意义，表示群聊消息扩散写前原始消息的指纹码（目前主要用于消息“撤回”功能时） */
    private String fp;

    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private Date timestamp;
    // 1 是 0 否
    private Integer deleted;
    // 1 已读 0 未读 （20250113废弃）
    private Integer readStatus;

    // 1 撤销 0否
    private Integer revoked;

    // 0 双向删除了或 删除人的UId， 当此字段非空时，deleted字段无效 (20250113废弃)
    private String deleteUid;

}
